/*
Copyright (c) [2019年5月1日] [吴超]
[MBT_Studio] is licensed under Mulan PSL v2.
You can use this software according to the terms and conditions of the Mulan PSL v2.
You may obtain a copy of Mulan PSL v2 at:
		 http://license.coscl.org.cn/MulanPSL2
THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND,
EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT,
MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE.
See the Mulan PSL v2 for more details.
*/
#pragma once


#include "框架/工作区/节点构建.h"
#include "节点/物理/物理体.h"



C_节点面板* f_节点构建_粒子系统(S_UI创建环境& ctx, S_设备环境& ctx_3d, C_节点基类* node = 0, C_节点树* tree = nullptr);
void f_节点重置_粒子系统(C_节点面板* plane, C_节点基类* node);

C_节点面板* f_节点构建_点粒子发射(S_UI创建环境& ctx);
C_节点面板* f_节点构建_线粒子发射(S_UI创建环境& ctx);
C_节点面板* f_节点构建_圆面粒子发射(S_UI创建环境& ctx, C_节点基类* node = 0);
C_节点面板* f_节点构建_球体粒子发射(S_UI创建环境& ctx);
C_节点面板* f_节点构建_方面粒子发射(S_UI创建环境& ctx);
C_节点面板* f_节点构建_方体粒子发射(S_UI创建环境& ctx);
C_节点面板* f_节点构建_网格面粒子发射(S_UI创建环境& ctx);




void f_节点重置_圆面粒子发射(C_节点面板* plane, C_节点基类* node);


C_节点面板* f_节点构建_物理引擎(S_UI创建环境& ctx, S_设备环境& view_ctx, C_节点基类* node = nullptr, C_节点树* tree = nullptr);
void		f_节点重置_物理引擎(C_节点面板* plane, C_节点基类* node);

C_节点面板*	f_节点构建_物理体(S_UI创建环境& ctx, S_设备环境& view_ctx, C_节点基类* node = 0, C_节点树* tree = nullptr);
void		f_节点重置_物理体(C_节点面板* plane, C_节点基类* node);

C_节点面板* f_节点构建_物理几何体(S_UI创建环境& ctx, S_设备环境& view_ctx, C_节点基类* node = 0, C_节点树* tree = nullptr);
void		f_节点重置_物理几何体(C_节点面板* plane, C_节点基类* node);

C_节点面板* f_节点构建_物理体添加(S_UI创建环境& ctx, S_设备环境& view_ctx, C_节点基类* node = nullptr, C_节点树* tree = nullptr);
void		f_节点重置_物理体添加(C_节点面板* plane, C_节点基类* node);

C_节点面板* f_节点构建_取物理体节点(S_UI创建环境& ctx, S_设备环境& view_ctx, C_节点基类* node = nullptr, C_节点树* tree = nullptr);
void		f_节点重置_取物理体节点(C_节点面板* plane, C_节点基类* node);

C_节点面板* f_节点构建_物理体绑定物体节点(S_UI创建环境& ctx, S_设备环境& view_ctx, C_节点基类* node = nullptr, C_节点树* tree = nullptr);
void		f_节点重置_物理体绑定物体节点(C_节点面板* plane, C_节点基类* node);

C_节点面板* f_节点构建_物理引擎内部几何节点(S_UI创建环境& ctx, S_设备环境& view_ctx, C_节点基类* node = nullptr, C_节点树* tree = nullptr);
void		f_节点重置_物理引擎内部几何节点(C_节点面板* plane, C_节点基类* node);


C_节点面板* f_节点构建_物理单方向力(S_UI创建环境& ctx, C_节点基类* node = 0);
void		f_节点重置_物理单方向力(C_节点面板* plane, C_节点基类* node);

C_节点面板* f_节点构建_物理应用力(S_UI创建环境& ctx, S_设备环境& view_ctx, C_节点基类* node = nullptr, C_节点树* tree = nullptr);
void		f_节点重置_物理应用力(C_节点面板* plane, C_节点基类* node);

C_节点面板* f_节点构建_更新肌腱力度(S_UI创建环境& ctx, S_设备环境& view_ctx, C_节点基类* node = nullptr, C_节点树* tree = nullptr);
void		f_节点重置_更新肌腱力度(C_节点面板* plane, C_节点基类* node);


C_节点面板* f_节点构建_发射(S_UI创建环境& ctx, S_设备环境& view_ctx, C_节点基类* node = nullptr, C_节点树* tree = nullptr);
void		f_节点重置_发射(C_节点面板* plane, C_节点基类* node);


C_节点面板* f_节点构建_FLIP解算器(S_UI创建环境& ctx, C_节点基类* node = 0);
void		f_节点重置_FLIP解算器(C_节点面板* plane, C_节点基类* node);



C_节点面板* f_节点构建_PBF解算器(S_UI创建环境& ctx, S_设备环境& view_ctx, C_节点基类* node = 0, C_节点树* tree = nullptr);
void		f_节点重置_PBF解算器(C_节点面板* plane, C_节点基类* node);


C_节点面板* f_节点构建_FleX参数(S_UI创建环境& ctx, S_设备环境& view_ctx, C_节点基类* node = 0, C_节点树* tree = nullptr);
void		f_节点重置_FleX参数(C_节点面板* plane, C_节点基类* node);


C_节点面板* f_节点构建_解算器模拟(S_UI创建环境& ctx, S_设备环境& view_ctx, C_节点基类* node = 0, C_节点树* tree = nullptr);
void		f_节点重置_解算器模拟(C_节点面板* plane, C_节点基类* node);











bool f_物理节点重构(C_节点面板** plane, C_节点基类* node, S_UI创建环境* ctx);


